package zsc.nine.onlinemall.mapper;

import org.apache.ibatis.annotations.*;
import zsc.nine.onlinemall.entity.Order;

import java.util.List;

/**
 * @author 莫远烙
 * @createDate : 2021.7
 * @version 1.0
 */
@Mapper
public interface OrderMapper {


    /**
     *
     * @param order 订单类
     * @return true:成功,false:失败
     */
    //1、添加订单
    @Insert("insert into t_order(id,sum,receiver,address,mobile,createDate,status,itemNumber,bProductId,creatorEmail,productName)" +
            "values(#{id},#{sum},#{receiver},#{address},#{mobile},#{createDate},#{status},#{itemNumber},#{bProductId},#{creatorEmail},#{productName})")
    boolean insertOrder(Order order);

    /**
     *
     * @param id 订单id
     * @return true:成功,false:失败
     */
    //2、删除订单
    @Delete("delete from t_order where id = #{id}")
    boolean deleteOrder(int id);

    /**
     *
     * @param id 订单id
     * @param sum 订单金额
     * @return true:成功,false:失败
     */
    //2、更新金额
    @Update("Update t_order set sum=#{sum} where id=#{id}")
    boolean updateSumById(int id, Double sum);

    /**
     *
     * @param id 订单id
     * @param receiver 收件人（名字）
     * @return true:成功,false:失败
     */
    //42、根据id更新收件人
    @Update("Update t_order set receiver=#{receiver} where id=#{id}")
    boolean updateReceiverById(int id, String receiver);

    /**
     *
     * @param id 订单id
     * @param address 订单地址
     * @return true:成功,false:失败
     */
    //43、根据id更新地址
    @Update("Update t_order set address=#{address} where id=#{id}")
    boolean updateAddressById(int id, String address);

    /**
     *
     * @param id 订单id
     * @param mobile 收件人电话
     * @return true:成功,false:失败
     */
    //44、根据id更新电话号码
    @Update("Update t_order set mobile=#{mobile} where id=#{id}")
    boolean updateMobileById(int id, String mobile);

    /**
     *
     * @param id 订单id
     * @param status 订单状态； 状态0为未发货，1为已发货，2为已退款，3为已过期
     * @return
     */
    //45、根据id更新订单状态
    @Update("Update t_order set status=#{status} where id=#{id}")
    boolean updateStatusById(int id, int status);

    /**
     *
     * @param id 订单id
     * @param itemNumber 商品数量
     * @return true:成功，false:失败
     */
    //46、根据id更新商品数量
    @Update("Update t_order set itemNumber=#{itemNumber} where id=#{id}")
    boolean updateItemNumberById(int id, int itemNumber);

    /**
     *
     * @param id 订单id
     * @param bUserId 所属用户Id
     * @return true:成功，false:失败
     */
    //47、根据id更新所属用户Id
    @Update("Update t_order set bUserId=#{bUserId} where id=#{id}")
    boolean updateUerIdById(int id, int bUserId);

    /**
     *
     * @param id 订单id
     * @param bProductId 产品Id
     * @return true:成功，false:失败
     */
    //48、根据id更新产品Id
    @Update("Update t_order set bProductId=#{bProductId} where id=#{id}")
    boolean updateProductIdById(int id, int bProductId);

    /**
     *
     * @return 订单列表
     */
    //7、查找所有订单
    @Select("select * from t_order")
    List<Order> findAllOrder();

    /**
     *
     * @param id 订单id
     * @return 订单类
     */
    //7、根据id查找订单
    @Select("select * from t_order where id=#{id}")
    Order findOrderById(int id);

    /**
     *
     * @param num
     * @return
     * @deprecated 不存在OrderNo
     */
    //7、根据编号查找订单
    @Select("select * from t_order where OrderNo=#{num}")
    List<Order> findOrderByNum(String num);

    //7、分页查询

    /**
     * @param key:排序索引可选字段：Order类的属性
     * @param index                  分页起始位置
     * @param pageSize               分页大小
     * @return Order 列表降序
     */
    @Select("select * from t_order order by #{key} desc limit #{index},#{pageSize} ")
    List<Order> pagedFind(String key, int index, int pageSize);


    /**
     * @param index    分页起始位置
     * @param pageSize 分页大小
     * @return Order 列表升序
     */
    @Select("select * from t_order order by id asc limit #{index},#{pageSize} ")
    List<Order> pagedFindById(int index, int pageSize);

    /**
     * @param index    分页起始位置
     * @param pageSize 分页大小
     * @return Order 列表升序
     */
    @Select("select * from t_order where creatorEmail=#{creatorEmail} order by id asc limit #{index},#{pageSize} ")
    List<Order> pagedFindByCreatorEmail(int index, int pageSize, String creatorEmail);

    /**
     * @return 共有多少行数
     * @author Zainus
     */
    @Select("select count(id) from t_order")
    String getLength();

}
